/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package operaciones;

import controller.AdministradorJpaController;
import controller.EmpresaJpaController;
import controller.PersonanaturalJpaController;
import dto.Administrador;
import dto.Empresa;
import dto.Personanatural;

import java.util.Date;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.persistence.EntityManager;
import javax.persistence.Query;

/**
 *
 * @author chokurey
 */
@ManagedBean(name="ValidarUsuario")

public class ValidarUsuario {
    
    UIComponent componente;
    Object valor;
    
    private Empresa empresa=null;
    private Personanatural pernat=null;
    private Administrador admin=null;
    
    EmpresaJpaController empresajpa;
    PersonanaturalJpaController pernatjpa;
    AdministradorJpaController adminjpa;
    
    int op=0;
    
    Map sessionm;
    
    Mensajes msg;
    
    private boolean usuarioencontrado=false,validaPlanEmpresaliarBasico,validaPlanEmpresaliarComplementario,validaPlanEmpresarial;
    private String enlaces;
    Query query;
    EntityManager em;

    public boolean isValidaPlanEmpresarial() {
        validaPlanEmpresarial=validarPlanEmpresarial();
        return validaPlanEmpresarial;
    }

    public void setValidaPlanEmpresarial(boolean validaPlanEmpresarial) {
        this.validaPlanEmpresarial = validaPlanEmpresarial;
    }
    
    

    public boolean isValidaPlanEmpresaliarComplementario() {
        validaPlanEmpresaliarComplementario=validarPlanEmpresarialComplementario();
        return validaPlanEmpresaliarComplementario;
    }

    public void setValidaPlanEmpresaliarComplementario(boolean validaPlanEmpresaliarComplementario) {
        this.validaPlanEmpresaliarComplementario = validaPlanEmpresaliarComplementario;
    }
    
    
    

    public boolean isValidaPlanEmpresaliarBasico() {
        validaPlanEmpresaliarBasico=validarPlanEmpresarialBasico();
        return validaPlanEmpresaliarBasico;
    }

    public void setValidaPlanEmpresaliarBasico(boolean validaPlanEmpresaliarBasico) {
        this.validaPlanEmpresaliarBasico = validaPlanEmpresaliarBasico;
    }

 
    
    
    
    
    public Administrador getAdmin() {
        admin=obtenerSessionAdministrador();
        return admin;
    }

    public void setAdmin(Administrador admin) {
        this.admin = admin;
    }

    
    
    public Personanatural getPernat() {
        pernat=obtenerSessionPersonaNatural();
        return pernat;
    }

    public void setPernat(Personanatural pernat) {
        this.pernat = pernat;
    }

    
    
    public Empresa getEmpresa() {
        empresa=obtenerSessionEmpresa();
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    public String getEnlaces() {
        return enlaces;
    }

    public void setEnlaces(String enlaces) {
        this.enlaces = enlaces;
    }

    
    public boolean isUsuarioencontrado() {
        return usuarioencontrado;
    }

    public void setUsuarioencontrado(boolean usuarioencontrado) {
        this.usuarioencontrado = usuarioencontrado;
    }
    
    public void validarUsuario(ActionEvent e)
    {
     componente=e.getComponent().findComponent("tipousuarioingreso");
     valor=((EditableValueHolder)componente).getValue();
     
     if(String.valueOf(valor).equals("Administrador"))
        op=1;
     if(String.valueOf(valor).equals("Empresa"))
        op=2;
      if(String.valueOf(valor).equals("Persona Natural"))
        op=3;
      
       switch(op)
       {
           case 1:validarAdministrador(e);
           break;
           case 2:validarEmpresa(e);
           break;
           case 3:validarPersonaNatural(e);
           break;
       }
    
    }
    
    
    
    public void validarAdministrador(ActionEvent e)
    {
         String nomusu="",paswd="";
         
         componente=e.getComponent().findComponent("nomusuarioingreso");
         valor=((EditableValueHolder)componente).getValue();
         nomusu=String.valueOf(valor);
         
         componente=e.getComponent().findComponent("passwdusuarioingreso");
         valor=((EditableValueHolder)componente).getValue();
         paswd=String.valueOf(valor);
         
         adminjpa=new AdministradorJpaController();
         admin=adminjpa.findAdministrador(1);
         
         if(admin!=null)
         {
           if(admin.getNombreusuario().equals(nomusu) && admin.getPassword().equals(paswd))
           {
                 usuarioencontrado=true;
                 setEnlaces("administrador");
                 //REGISTRANDO LA SESSION DEL USUARIO YA VALIDADO
                 sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
                 sessionm.put("sessionadministrador", admin);
                 admin=obtenerSessionAdministrador();
           
           }else
             { 
                 usuarioencontrado=false;
                 setEnlaces("error");
             }
         
         }
         

    }
    public void validarEmpresa(ActionEvent e)
    {
         String nomusu="",paswd="";
         Date fechaactual=new Date();
         
         componente=e.getComponent().findComponent("nomusuarioingreso");
         valor=((EditableValueHolder)componente).getValue();
         nomusu=String.valueOf(valor);
         
         componente=e.getComponent().findComponent("passwdusuarioingreso");
         valor=((EditableValueHolder)componente).getValue();
         paswd=String.valueOf(valor);
         
         empresajpa= new EmpresaJpaController();
         empresa=empresajpa.findEmpresa(nomusu); 
      
        if(empresa != null)
        {   
             if(empresa.getNit().equals(nomusu) && empresa.getPassword().equals(paswd))
             {
                 usuarioencontrado=true;
                 if(empresa.getEstadousuario().equals("Habilitado") && fechaactual.before(empresa.getFechafinservicio()) && fechaactual.after(empresa.getFechainicioservicio())    )
                 {
                   if(empresa.getPlan().equals("Empresarial"))
                       setEnlaces("planempresarial");
                     else
                        if(empresa.getPlan().equals("Complementario"))
                            setEnlaces("plancomplementario");
                          else 
                             if(empresa.getPlan().equals("Basico"))
                                setEnlaces("planbasico");
                               else
                                  setEnlaces("empresa");
                 } else
                    setEnlaces("empresa");
                 
                 //REGISTRANDO LA SESSION DEL USUARIO YA VALIDADO
                 sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
                 sessionm.put("sessionempresa", empresa);
                 empresa=obtenerSessionEmpresa();
             }    
             else
             { 
                 usuarioencontrado=false;
                 setEnlaces("error");
             }
         
        }
         
       
             
    }
    public void validarPersonaNatural(ActionEvent e)
    {
         String nomusu="",paswd="";
         
         componente=e.getComponent().findComponent("nomusuarioingreso");
         valor=((EditableValueHolder)componente).getValue();
         nomusu=String.valueOf(valor);
         
         componente=e.getComponent().findComponent("passwdusuarioingreso");
         valor=((EditableValueHolder)componente).getValue();
         paswd=String.valueOf(valor);
         
         pernatjpa=new  PersonanaturalJpaController();
         pernat=pernatjpa.findPersonanatural(nomusu);
         
         if(pernat!=null)
         {
           if(pernat.getCc().equals(nomusu) && pernat.getPassword().equals(paswd))
           {
             usuarioencontrado=true;
             setEnlaces("personanatural");
             sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
             sessionm.put("sessionpersonanatural", pernat);
             pernat=obtenerSessionPersonaNatural();
           }else
             { 
                 usuarioencontrado=false;
                 setEnlaces("error");
             }
               
         }
    
   }
    
     public Empresa obtenerSessionEmpresa(){
   
          sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
          empresa = (Empresa) sessionm.get("sessionempresa");
          
       return empresa;   
   }
      
    public Personanatural obtenerSessionPersonaNatural(){
   
          sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
          pernat = (Personanatural) sessionm.get("sessionpersonanatural");
          
       return pernat;   
   }
    
        
    public Administrador obtenerSessionAdministrador(){
   
          sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
          admin = (Administrador) sessionm.get("sessionadministrador");
          
       return admin;   
   }
    
      public String obtenerEnlace()
      {
        return getEnlaces();
      }
      
     public String cerrarsessionAdministrador(){
     
       admin=null;
       sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
       sessionm.put("sessionadministrador", admin);
       setEnlaces("cerrarsession");
       
       return getEnlaces();
     } 
     
     public String cerrarsessionEmpresa(){
      empresa=null;   
      sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
      sessionm.put("sessionempresa", empresa);
      setEnlaces("cerrarsession");
       return getEnlaces();
     }
      
     public String cerrarssessionPersonaNatural(){
             
         pernat=null;
         sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
         sessionm.put("sessionpersonanatural", pernat);
         setEnlaces("cerrarsession");
          return getEnlaces();
     }
     
     public boolean validarPlanEmpresarialBasico()
     {
         
       boolean ok=false;
       
       empresa=obtenerSessionEmpresa();
       if(empresa!=null && empresa.getPlan().equals("Basico"))
           ok=true;
       else
            ok=false;
     
       return ok;
     }
     
     public boolean validarPlanEmpresarialComplementario()
     {
         
       boolean ok=false;
       
       empresa=obtenerSessionEmpresa();
       if(empresa!=null && empresa.getPlan().equals("Complementario"))
           ok=true;
       else
            ok=false;
     
       return ok;
     }
     
       public boolean validarPlanEmpresarial()
     {
         
       boolean ok=false;
       
       empresa=obtenerSessionEmpresa();
       if(empresa!=null && empresa.getPlan().equals("Empresarial"))
           ok=true;
       else
            ok=false;
     
       return ok;
     }
     
     
}
